

\begin{landscape}
\section{Modelo Conceptual}
\subsection{Gráfico}

\begin{figure}[H]
  \centering
    \includegraphics[width=1.4\textwidth]{./conceptual/conceptual.pdf}
  \caption{Gráfico del Modelo Conceptual Parte I}
\end{figure}

\end{landscape}

\begin{figure}[H]
  \centering
    \includegraphics[width=0.7\textwidth]{./conceptual/anexo.pdf}
  \caption{Gráfico del Modelo ConceptualParte II}
\end{figure}

\subsection{Explicación de las clases}
\begin{compactitem}
  \item \texttt{Cliente}: representa al cliente que hace el pedido, gana puntos por éstos, gana descuentos si supera una franja de puntos dada y recibe las entregas hechas por el moto del local. Sus relaciones indican las veces que superó la franja de puntos, y por ende, se le reinició el puntaje y recibió descuentos; y los pedidos que hizo a lo largo de la historia.
  \item \texttt{Franja Superada}: con esta clase representamos la fecha de una superación de franja y cuánto era la franja a superar. Sus relaciones representan quién fue el cliente que la superó y a qué pedido se le asignó el descuento debido de la franja. Además está relacionada \textit{siempre} con un objeto de la clase \texttt{Descuento} y subclase \texttt{Premio Por Franja} que le indica de cuánto es el descuento por haber superado la franja.\footnote{\label{note1}Decidimos hacerlo de esta forma, poniendo una clase descuento con diferentes tipos, para dar énfasis en el hecho de que los descuentos por cada subtipo (\texttt{Franja Superada}, \texttt{Pronto Vencimiento} y \texttt{Llegada Tarde}) puede cambiar a lo largo del tiempo debido a decisiones económicas del local.}
  \item \texttt{Pedido}: indica toda la información importante sobre un pedido: el día a entregar el pedido, la hora a entregarlo, los puntos que se le sumaron al usuario por el pedido y el precio sumado entre los costos de los productos solicitados.\footnote{Recordar la definición de ``Precio del pedido'' en la sección \textbf{Introducción al Trabajo Práctico.}} Está relacionado con la clase \texttt{Envase}, indicando la cantidad de éstos que requiere el pedido; con la clase \texttt{Franja Superada} para saber si es un pedido con algún descuento aplicado si el cliente superó su franja de puntos justo con este pedido; con la clase \texttt{Entrega} para relacionar la entrega con el pedido original, aunque puede que no haya sido entregado aún, o que nunca lo sea si fue cancelado; con la clase \texttt{Stock Necesario Día} y así sabemos en que total de stock para el día fue contado (aunque la vuelta tiene más sentido). Además, tiene el siguiente subtipo:
  \begin{compactitem}
    \item \texttt{Cancelado}: lo usamos para diferenciar a los pedidos cancelados de los todavía vigentes. Además, es usado en el invariante que aclara que no se puede cancelar un pedido en el mismo día de la entrega de éste.
  \end{compactitem}
  \item \texttt{Fecha Solicitado} (\textit{clase de Asociación}): indica la fecha en la que fue hecho el pedido por el cliente y lo relaciona a éste con su pedido. La usamos para el invariante de que no se pueden hacer pedidos para ser entregados en el mismo día.
  \item \texttt{Envase}: en esta clase modelamos a los envases que van a ser vendidos y comprados por el local. Está relacionado con la clase \texttt{Producto} así se sabe de qué tipo de producto es el envase, con un \texttt{Pedido} para saber si ya fue asignado o no a un pedido. Además, tiene los siguientes subtipos:
  \begin{compactitem}
    \item \texttt{En Stock}: indica que el envase ya se encuentra en Stock y no debe ser comprado para satisfacer al pedido. Además, esta subclase tiene una relación con la clase \texttt{Descuento} y subclase \texttt{Pronto Vencimiento} para indicar si tiene o no un descuento asignado por ser de pronto vencimiento$^1$.
    \item \texttt{No en Stock}: indica que este envase no está en stock y debe comprarse a la mañana del día con el proveedor. No tiene sentido asignarle un descuento por pronto vencimiento, aunque el proveedor nos dé un envase con pronto vencimiento, porque el cliente no lo pidió específicamente en el pedido, simplemente pidió un envase, y por ende, no se merece un descuento.
  \end{compactitem}
  \item \texttt{Producto}: diferencia entre los diferentes productos disponibles para la venta y nos dice su nombre, los puntos que suma por envase este producto y el precio, también por envase. Su única relación es con el \texttt{Envase} y nos indica la cantidad de envases que hay en Stock. Ninguno de éstos será de la subclase \texttt{No en Stock}.
  \item \texttt{StockNecesarioDía}: es la clase que nos dice las cosas que tenemos que satisfacer en el día: sea \texttt{envases} requeridos o \texttt{pedidos} a complacer; indicándonos la fecha.
  \item \texttt{Entrega}: es donde representaremos la entrega en sí de la moto hacia el cliente, indicándonos el precio final de la entrega $^2$ y la hora en la que fue entregado \footnote{Asumimos que siempre lo entrega en el mismo día al pedido. Es probable que haya casos borde en los que la entrega sea tarde de noche y la motito llegue \textit{al otro día} y la hora de entrega indicada no sea la correcta, pero para no complejizar más al TP, preferimos asumir no posibles estos casos.}. Esta clase está relacionada con la clase \texttt{Pedido} para referenciar al pedido original de esta entrega y además permitirnos escribir el invariante de que el precio final es el precio del pedido por el descuento por llegar tarde. También está relacionado con la ruta que tomó la moto para hacer la entrega y también tenemos la relación con la subclase \texttt{Llegar Tarde} de la clase \texttt{Descuento} previamente mencionada, para saber si hubo o no descuento por llegar tarde, y de cuánto fue$^1$.
  \item \texttt{Ruta}: básicamente nos dice los \texttt{pedidos} a entregar por ruta y a qué \texttt{moto} está asignada esta ruta.
  \item \texttt{Moto}: esta clase modela las motos, los \texttt{pedidos} que les fueron siendo asignados para entregar y los diferentes tipos de subclase que pueden ser las motos. Además, las \texttt{rutas} que debió y debe recorrer para entregar los pedidos.
    \begin{compactitem}
    \item \texttt{Alquilada}: representa las motos que fueron alquiladas para completar los envíos que no podían satisfacerse con las motos del local. No tiene sentido modelar si están disponibles o no. \footnote{Recordar que para este trabajo habíamos asumido que no se aceptaban pasadas a buscar por el local. En cambio, si no había motos disponibles, \textit{siempre} se podría alquilar motos para completar los envíos, por ende, \textit{siempre} estarán disponibles.}
    \item \texttt{Local}: las motos que son del local y pueden ser:
       \begin{compactitem}
         \item \texttt{Disponible}: está disponible para ser asignada envíoss.
         \item \texttt{No Disponible}: no está disponible para ser asignada envíoss.
       \end{compactitem}
  \end{compactitem}
  \item \texttt{Descuento}: finalmente, esta clase representa todos los tipos de descuentos asignables en este trabajo práctico.\footnote{Recordar que en el Trabajo Práctico 1, además, habíamos considerado el descuento por hacer pedidos anticipados pero como en este trabajo \textbf{siempre} hablamos de pedidos anticipados, no tiene mucho sentido considerarlo y es mejor asumirlo siempre implícito.} Son siempre menores a 1 y mayores o iguales a 0.
    \begin{compactitem}
    \item \texttt{Premio Por Franja}: es el descuento asignable como premio a los pedidos de los clientes que superaron una franja de descuentos fijada. Sólo tiene sentido que esté relacionada con la clase \texttt{Franja Superada}.
    \item \texttt{Llegar Tarde}: es el descuento asignable como \textit{disculpa} a las entregas que llegaron más de 30 tarde. Puede ser descuento del 100\%, entonces el atributo descuento valdría 0, si llegó más de 45 minutos tarde. Sólo tiene sentido que esté relacionada con la clase \texttt{Entrega}.
    \item \texttt{Pronto vencimiento}: es el descuento asignable a los productos con pronto vencimiento para incentivar su compra por parte de los clientes del bar. Sólo tiene sentido que esté relacionada con la clase \texttt{En Stock}.
  \end{compactitem}
  Aunque cada una de las tres subclases puede estar relacionada con sólo una clase distinta a las demás, decidimos poner una herencia con la clase \texttt{Descuento} \textit{en el medio} en vez de directamente unir una a una las relaciones para dejar más claro que las tres clases son descuentos, aunque aplicables en diferentes momentos.
\end{compactitem}


\subsection{Invariantes}

\begin{itemize}
%Los descuentos están uno a uno.
\item Todos los envases con los que está relacionada la clase \texttt{Producto} son de la subclase \texttt{En Stock}

$Context: Producto$

$Inv: self.enStock\rightarrow forAll(e \ | \ e.OCLIsKindOf(En Stock) )$



\item El descuento por \texttt{Pronto Vencimiento} sólo debe ser aplicable a la clase \texttt{EnStock} y viceversa.

$Context: En Stock$

$Inv: self.descuento <> null \implies self.descuento.OCLIsKindOf(Pronto Vencimiento)$

$Context: Descuento$

$Inv: self.OCLIsKindOf(Pronto Vencimiento) \implies self.porFranja.size() = self.porLlegarTarde.size() = 0$

\item El descuento por \texttt{Llegar Tarde} sólo debe ser aplicable a la clase \texttt{Entrega} y viceversa.

$Context: Entrega$

$Inv: self.descuento <> null \implies self.descuento.OCLIsKindOf(Llegar Tarde)$

$Context: Descuento$

$Inv: self.OCLIsKindOf(Llegar Tarde) \implies self.porFranja.size() = self.porVencimiento.size() = 0$

\item El descuento por \texttt{Franja Superada} sólo debe ser aplicable a la clase \texttt{Premio Por Franja} y viceversa.

$Context: FranjaSuperada$

$Inv: self.descuento <> null \implies self.descuento.OCLIsKindOf(Premio Por Franja)$

$Context: Descuento$

$Inv: self.OCLIsKindOf(Premio Por Franja) \implies self.porLlegarTarde.size() = self.porVencimiento.size() = 0$



%1
\item El precio de la entrega debe ser igual al precio del pedido agregando el descuento (si es que existe).

$Context: Entrega$

$Inv: self.descuento <> null \implies self.precioFinal = self.descuento.descuento \times self.pedidoOriginal.precioSumado$
$Inv: self.descuento = null \implies self.precioFinal = self.pedidoOriginal.precioSumado$

%2
\item Si un pedido está cancelado, entonces el pedido no está relacionado con ninguna entrega.

$Contexto: Pedido$

$Inv: self.OCLIsKindOf(Cancelado) \implies self.entregadoCon = Null$

%3
\item Si un pedido está cancelado, entonces el pedido no está relacionado con ninguna moto.

$Contexto: Pedido$

$Inv: self.OCLIsKindOf(Cancelado) \implies self.asignadoA = Null$

%4
% \item Si una moto está asignada a un pedido, entonces esa moto tiene que estar como disponible el día de la entrega.
% 
% $Contexto: Pedido$
% 
% $Inv: self.asignadoA <> Null \implies self.asignadoA.diaDisponible \rightarrow includes(self.diaAEntregar)$ 

%5
\item La fecha de cancelación es anterior a la fecha de entrega del pedido.

$Contexto: Pedido$

$Inv: self.OCLIsKindOf(Cancelado) \implies self.fechaDeCancelacion > fechaSolicitada[self, self.hechoPor]$

%6
\item El precio establecido en el pedido tiene que ser correcto$^2$. %Es decir:

% PrecioPedido = ($\sum$ \$(pedido$_i$) $\times$ $cant$(producto$_i$)) $\times$ descuentoPorFranjaSuperada
% 
% donde \textit{descuentoPorFranjaSuperada} es el descuento por franja superada asociado a ese pedido y la sumatoria representa el precio de cada producto que hay en el pedido multiplicado por la cantidad que se pide de ese producto. Además el precio del producto es el precio original del producto multiplicado por el descuentoPorProntoVencimiento.
Se puede hacer teniendo en cuenta dos tipos de descuentos (\texttt{Pronto Vencimiento} y \texttt{Franja Superada}), el pedido, la franja superada y los envases, pero no nos pareció que tanto esfuerzo sería claro.

%7
\item %Para cada día, los productos necesarios (y su cantidad) del StockNecesario para ese día deben ser los mismos (y en la misma cantidad) de los productos necesarios de todos los pedidos para ese día.
      Los envases necesarios de un StockNecesarioDía deben ser iguales a los envases requeridos por los pedidos a complacer de ese mismo día.

%8
\item La fecha de entrega de un pedido debe ser, al menos, un día posterior al de la fecha en que se solicita el mismo.

$Contexto: Pedido$

$Inv: self.diaAEntregar > fechaSolicitada[self.hechoPor, self]$

\item Una moto no puede entregar dos pedidos al mismo tiempo

\end{itemize}









% \begin{figure}[H]
%\centering
%\epsfig{file=./pdfsObjetivos/Coordinar Pedidos.pdf,width=0.9\linewidth,clip=}
%\caption{Proceso de pedidos anticipados.}
%\end{figure}	
%
%\begin{landscape}
%
%\begin{figure}[H]
%  \centering
%    \includegraphics[width=1.1\textwidth]{./pdfsObjetivos/Coordinar Pedidos.jpg}
%  \caption{Fr= 0.5 - a=0 - b=15 - h=40 - v=7.2 - g=9.81 - m=100 - x=5}
%  \label{fig:EnMecCr}
%\end{figure}
%
%\end{landscape}


% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/general.pdf,width=0.9\linewidth,clip=}
% \caption{Diagrama general.}
% \end{figure}
% 
% \subsubsection{Refinamiento de Coordinar Pedidos}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/coordpedidosn1.pdf,width=0.9\linewidth,clip=}
% \caption{Refinamiento Coordinar Pedidos.}
% \end{figure}
% 
% \begin{compactitem}
% \item \textbf{Recibir pedido vía web para no anticipados}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/coordpedidosn21.pdf,width=0.9\linewidth,clip=}
% \caption{Recibir pedido por app para no anticipados.}
% \end{figure}	
% 
% \item \textbf{Recibir pedido vía web para anticipados}
% \begin{figure}[H]
% \centering	
% \epsfig{file=./pdfsObjetivos/coordpedidosn22.pdf,width=0.9\linewidth,clip=}
% \caption{Recibir pedido por app para anticipados.}
% \end{figure}	
% 
% \end{compactitem}
% \newpage
% \begin{landscape}
% \subsubsection{Refinamiento de Realizar Entregas}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/realizarEntregas.pdf,width=0.9\linewidth,clip=}
% \caption{Árbol inicial de realizar entregas.}
% \end{figure}
% 
% \begin{compactitem}
%  
% \item \textbf{Entregar pedido si hay motos disponibles}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/entregarPedidoSiHayMotosDisponibles.pdf,width=0.9\linewidth,clip=}
% \end{figure}
% 
% \item \textbf{Realizar entregas con motos alquiladas}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/realizarEntregasConMotosAlquiladas.pdf,width=0.9\linewidth,clip=}
% \end{figure}
% 
% \end{compactitem}
% 
% \subsubsection{Refinamiento de Incentivar Usuarios}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/incentivarUsuarios.pdf,width=0.9\linewidth,clip=}
% \caption{Árbol completo de incentivar usuarios}
% \end{figure}
% 
% \subsubsection{Refinamiento de Buen Manejo de Stock}
% 
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/buenManejoDeStock.pdf,width=0.9\linewidth,clip=}
% \caption{Árbol inicial de buen manejo de stock}
% \end{figure}
% 
% \begin{compactitem}
% \item \textbf{Tener Stock suficiente}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/tenerStockSuficiente.pdf,width=0.9\linewidth,clip=}
% \end{figure}
% 
% \item \textbf{Reabastecer diariamente}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/tenerStockSuficienteParaElDia.pdf,width=0.9\linewidth,clip=}
% \caption{Recibir pedido por app para anticipados.}
% \end{figure}
% 
% Nota, \textit{reabastecer semanalmente} tiene exactamente los mismos hijos que \textit{reabastecer diariamente}, por eso decidimos no agregar ambos
% 
% \item \textbf{Promocionar productos con pronto vencimiento}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/promocionarVencimiento.pdf,width=0.9\linewidth,clip=}
% \caption{Recibir pedido por app para anticipados.}
% \end{figure}
% 
% \item \textbf{Promocionar productos con baja demanda}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/promocionarBajaDemanda.pdf,width=0.9\linewidth,clip=}
% \caption{Recibir pedido por app para anticipados.}
% \end{figure}
% \end{compactitem}
% 
% 
% 
% \subsubsection{Refinamiento de Incentivar Ventas Anticipadas}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/incentivarAnticipadas.pdf,width=0.9\linewidth,clip=}
% \caption{Árbol completo de incentivar ventas anticipadas}
% \end{figure}
% 
% 
% \subsubsection{Refinamiento de Cancelar Pedidos}
% \begin{figure}[H]
% \centering
% \epsfig{file=./pdfsObjetivos/cancelarPedidos.pdf,width=0.9\linewidth,clip=}
% \caption{Árbol completo de cancelar pedidos.}
% \end{figure}
% 
% \end{landscape}
% 
% \subsection{Explicación de las alternativas}
% %Porque no aparenta ser demasiado claro en el diagrama, agregaremos una explicación de las diferentes alternativas que incluimos en él.
% 
% % % Minimizar Costos de Envío vs Maximizar adaptabilidad a cambios
% % \begin{compactitem}
% %  \item Minimizar Costos de Envío: el comprar los productos una vez por semana minimiza los costos de envío ya que recibimos la mercancía 7 veces menos por semana y por ende, 7 envíos menos. Eso no significa que sea 7 veces menos costoso ya que puede que se necesite un envío más grande pero seguramente es un factor más barato.
% %  \item Maximizar adaptabilidad a cambios: en cambio, el comprar los productos todos los días nos da la posibilidad de poder adaptarnos mejor a pedidos fuera de lo común que nos podrían llegar a vaciar el stock prematuramente.
% % \end{compactitem}
% % 
% % % Maximizar Ingreso por Producto vs Maximizar espacio libre en heladera
% % \begin{compactitem}
% %   \item Maximizar ingreso por producto: al ofrecer descuentos en vez de productos gratis, no estaríamos regalando un producto que en un futuro podríamos llegar a vender. \textit{Recordar que el producto a regalar es elección del bar, no del cliente.}
% %  \item Maximizar espacio libre en heladera: en cambio, si regalamos productos en vez de ofrecer descuentos podríamos elegir nosotros específicamente los productos que más lugar liberen en la heladera y así organizar mejor nuestro stock.
% % \end{compactitem}
% % 
% % % Maximizar Satisfacción del Cliente vs Minimizar Costo de Entrega
% % \begin{compactitem}
% %  \item Maximizar Satisfacción del Cliente: al ofrecer un envío a 
% %  \item Minimizar Costo de Entrega:
% % \end{compactitem}
% 
% 
% A continuación pasamos a detallar las alternativas consideradas para los o-refinamientos junto a los los objetivos blandos definidos:
% 
% \begin{compactitem}
%   \item \textbf{Objetivo}: Reaprovisionar productos para el stock:
%     \begin{compactitem}
%       \item \textbf{Alternativas}: Reabastecer stock diariamente \textit{vs} semanalmente:
%       \begin{compactitem}
% 	\item \textbf{Minimizar Costos de Envío}: el comprar los productos una vez por semana minimiza los costos de envío ya que recibimos la mercancía 7 veces menos por semana y por ende, 7 envíos menos. Eso no significa que sea 7 veces menos costoso ya que puede que se necesite un envío más grande pero seguramente es un factor más barato.
% 	\item \textbf{Maximizar adaptabilidad a cambios}: en cambio, el comprar los productos todos los días nos da la posibilidad de poder adaptarnos mejor a pedidos grandes no esperados que nos podrían llegar a vaciar el stock prematuramente.
% 	\item \textbf{Maximizar disponibilidad de pedidos anticipados}: al comprar una vez por semana podríamos aumentar el rango de días disponibles por semana para hacer pedidos anticipados ya que se podrían hacer pedidos anticipados hacia el día siguiente todos los días de la semana, a diferencia del caso en el que reabasteceríamos el stock una vez por semana.
%       \end{compactitem}
%     \end{compactitem}
%   \item \textbf{Objetivo}: Incentivar ventas anticipadas: 
%     \begin{compactitem}
%       \item \textbf{Alternativas}: Ofrecer descuentos a los clientes \textit{vs} Regalar productos:
%       \begin{compactitem}
% 	\item \textbf{Maximizar ingreso por producto}: al ofrecer descuentos en vez de productos gratis, no estaríamos regalando un producto que en un futuro podríamos llegar a vender. \textit{Recordar que el producto a regalar es elección del bar, no del cliente.}
% 	\item \textbf{Maximizar espacio libre en heladera}: en cambio, si regalamos productos en vez de ofrecer descuentos podríamos elegir nosotros específicamente los productos que más lugar liberen en la heladera y así organizar mejor nuestro stock.
%       \end{compactitem}  
%     \end{compactitem}
%     
%   \item \textbf{Objetivo}: Realizar eficientemente la entrega de pedidos: 
%   \begin{compactitem}
%     \item \textbf{Alternativa}: Motos nuestras y alquilar motos \textit{vs} motos y el cliente pasa a buscar en el bar:
%     \begin{compactitem}
%       \item \textbf{Maximizar Satisfacción del Cliente}: en el caso de recurrir al delivery, se maximiza la satisfacción del cliente, ya que éste no tiene que moverse de su casa para recibir su pedido, a diferencia de la alternativa de pasar a buscar lo pedido por el bar.
%       \item \textbf{Minimizar Costo de Entrega}: en cambio, al recurrir al delivery se aumenta considerablemente el precio ya que debemos además pagar por el envío, sea sólo del conductor de la moto si hay disponibles o del servicio completo si debemos contratar un servicio privado adicional como lo serían alquilar motos ajenas al local.
%     \end{compactitem}
% 	\end{compactitem}
%  \end{compactitem}